/**
 * Copyright (C) 2021 All rights reserved.
 *
 * @file dp_trie_data.h
 * @author Wang Haibin
 * @email wanghaibin@qiyi.com
 * @date Thu Aug 29 10:33:57 CST 2024
 * @brief 字典树节点数据
 */
#pragma once

#include <memory>
#include <stack>

namespace dp {

class dp_trie_value {
public:
    /**
     * @brief 构造函数
     *
     */
    dp_trie_value() {}
    virtual ~dp_trie_value() {}

    /**
     * @brief 内容是否包含key, 用于节点嵌套查找
     *
     * @param params 当trie嵌套时params包含了每一级的参数.每级pop自己需要的参数
     * @return true 包含, false 不包含
     */
    virtual bool search(std::shared_ptr<dp_trie_value>& value,
                        std::stack<std::string>& params) = 0;
};

// 节点value为string
class dp_trie_value_string : public dp_trie_value {
public:
    dp_trie_value_string(const std::string& value);
    virtual ~dp_trie_value_string();

    /**
     * @brief 内容是否包含key, 不用查找直接返回true
     *
     * @param params 当trie嵌套时params包含了每一级的参数.每级pop自己需要的参数
     * @return true 包含, false 不包含
     */
    virtual bool search(std::shared_ptr<dp_trie_value>& value,
                        std::stack<std::string>& params);

    /**
     * @brief 获取设置的value
     *
     */
    const std::string& get_value() const { return value_; }

private:
    std::string value_;
};

}  // namespace dp
